'use client'; import './style.scss'; import { useState, useEffect } from 'react'; import { useParams } from 'next/navigation'; import { fetchApi } from '@/lib/utils/client'; type ConsentInfo = { crewSessionID: number; title: string; crewName: string; isConsented: boolean; crewMemberID: number; }; export default function CrewConsentPage() { const { sessionID } = useParams<{ sessionID: string }>(); const [info, setInfo] = useState(null); const [loading, setLoading] = useState(true); const [agreed, setAgreed] = useState(false); const [submitting, setSubmitting] = useState(false); const [done, setDone] = useState(false); useEffect(() => { fetchApi(`/api/crew/consent/info/${sessionID}`) .then(res => { const data = res.data; setInfo(data ?? null); if (data?.isConsented) setDone(true); }) .catch(() => {}) .finally(() => setLoading(false)); }, [sessionID]); const handleConsent = async () => { if (!info || !agreed) return; setSubmitting(true); try { await fetchApi('/api/crew/session/consent', { method: 'POST', body: { crewSessionID: info.crewSessionID, crewMemberID: info.crewMemberID } }); setDone(true); } catch (err: unknown) { alert(err instanceof Error ? err.message : '동의 처리에 실패했습니다.'); } finally { setSubmitting(false); } }; if (loading) return

준비 중...

; if (!info) return

세션 정보를 찾을 수 없습니다.

; return (

크루 방송 참여 동의

크루장이 방송 참여를 요청했습니다

크루 {info.crewName}
방송 제목 {info.title}
{done ? (
✓ 동의가 완료되었습니다. 전원 동의 시 방송이 시작됩니다.
) : ( <>
setAgreed(e.target.checked)} />
)}
); }